/**
 * Copyright (c) iwindplus Technologies Co., Ltd.2024-2030, All rights reserved.
 */

package com.iwindplus.setup.api;

import io.swagger.v3.oas.annotations.Operation;
import java.util.List;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

/**
 * 邮箱相关接口.
 *
 * @author zengdegui
 * @since 2020年4月1日
 */
public interface MailboxApi {

    /**
     * API前缀.
     */
    String API_PREFIX = "inner/mailbox/";

    /**
     * 发送邮件.
     *
     * @param code        配置编码（必填）
     * @param subject     邮件标题（必填）
     * @param content     邮件内容（必填）
     * @param tos         收件人（必填）
     * @param ccs         抄送人（可选）
     * @param bccs        密送人（可选）
     * @param attachments 附件（可选）
     */
    @Operation(summary = "发送邮件")
    @PostMapping(value = API_PREFIX + "send", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    void send(
        @RequestParam(value = "code") String code,
        @RequestParam(value = "subject") String subject,
        @RequestParam(value = "content") String content,
        @RequestParam(value = "tos") List<String> tos,
        @RequestParam(value = "ccs", required = false) List<String> ccs,
        @RequestParam(value = "bccs", required = false) List<String> bccs,
        @RequestPart(value = "attachments", required = false) List<MultipartFile> attachments);

    /**
     * 发送邮箱验证码（邮箱）.
     *
     * @param tplCode 模板配置编码（必填）
     * @param mail    邮箱（必填）
     */
    @Operation(summary = "发送邮箱验证码（邮箱）（模板参数固定为：captcha和timeout）")
    @PostMapping(API_PREFIX + "sendCaptcha")
    void sendCaptcha(
        @RequestParam(value = "tplCode") String tplCode,
        @RequestParam(value = "mail") String mail);

    /**
     * 发送邮箱验证码（用户主键）.
     *
     * @param tplCode 模板配置编码（必填）
     * @param userId  用户主键（必填）
     * @param orgId   组织主键（必填）
     */
    @Operation(summary = "发送邮箱验证码（用户主键）（模板参数固定为：captcha和timeout）")
    @PostMapping(API_PREFIX + "sendCaptchaByUserId")
    void sendCaptchaByUserId(
        @RequestParam(value = "tplCode") String tplCode,
        @RequestParam(value = "userId") Long userId,
        @RequestParam(value = "orgId") Long orgId);

}
